package com.jt.redis;

import redis.clients.jedis.Jedis;

import java.util.List;

/**
 * @author tang
 * @data 2021/10/9
 * @apiNode
 *
 * 演示抢购活动中的秒杀队列
 * 数据结构  list
 * 算法  FIFO
 * 数据存储结构:redis中list类型进行存储
 *
 * 在抢购活动中会执行这样的操作:
 * 1) 生产者(购买商品的用户):创建请求并将请求存储到队列
 * 2) 消费者(处理购买请求的底层对象):从队列取请求，然后处理请求
 */
public class SecondKillDemo01 {

    /**
     * 入队操作
     */
    public static void enque(String request){
        Jedis jedis = new Jedis("192.168.126.129", 6379);
        jedis.lpush("queue-1", request);
        jedis.close();
    }

    /**
     * 出队操作
     */
    public static String deque(){
        Jedis jedis = new Jedis("192.168.126.129", 6379);
        List<String> request = jedis.brpop(2,"queue-1");
        jedis.close();
        return request!=null ? request.get(1) : null;
    }

    public static void main(String[] args) {
        Thread thread1 = new Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    enque("request " + i);
                }
            }
        };

        Thread thread2 = new Thread(){
            @Override
            public void run() {
                for (;;){
                    String request = deque();
                    //if (request == null) continue;
                    System.out.println("process : "+request);
                }
            }
        };
        thread1.start();
        thread2.start();
    }
}
